package cn.xopencode.userservice.rpc.user;

import cn.xopencode.common.framework.vo.CommonResult;
import cn.xopencode.common.framework.vo.PageResult;
import cn.xopencode.userservice.rpc.user.dto.*;

import java.util.List;

/**
 * 用户管理
 *
 * @author xiaodawei
 * @since 2021-09-16
 */
public interface UserRpc {

    /**
     * 获取用户信息
     *
     * @param userId 用户编号
     * @return 用户
     */
    CommonResult<UserDTO> getUser(String userId);

    /**
     * 获取同部门下所有用户的信息
     *
     * @param userId 用户编号
     * @return 用户
     */
    CommonResult<List<UserDTO>> getUserList(String userId);

    /**
     * 根据参数获取用户信息
     *
     * @param userParamDTO 查询条件
     * @return 用户
     */
    CommonResult<List<UserDTO>> getUserList(UserParamDTO userParamDTO);

    /**
     * 根据用户id获取用户名
     * 如参数 “zhangsan1,zhangsan2,zhangsan3”。则返回 “张三1,张三2,张三3”
     *
     * @param userIds 用户编号
     * @return 用户名称
     */
    String getEmployeeName(String userIds);

    /**
     * 新建用户
     *
     * @param createUserDTO 用户信息
     * @return 用户编号
     */
    CommonResult<String> createUser(CreateUserDTO createUserDTO);

    /**
     * 用户列表分页查询
     *
     * @param userPageDTO 查询条件
     * @return 用户列表
     */
    CommonResult<PageResult<UserDTO>> findUserList(UserPageDTO userPageDTO);

    /**
     * 根据ID更改用户属性
     *
     * @param updatePropertyDTOList 属性集合
     */
    CommonResult<Integer> updateProperty(List<UpdatePropertyDTO> updatePropertyDTOList);

    /**
     * 批量更新用户信息
     *
     * @param updateUserDTOList 用户信息
     */
    CommonResult<Integer> updateUser(List<UpdateUserDTO> updateUserDTOList);

    /**
     * 基于手机号创建用户。
     * 如果用户已经存在，则直接进行返回
     *
     * @param createUserDTO 创建用户 DTO
     * @return 用户信息
     */
    CommonResult<UserDTO> createUserIfAbsent(CreateUserDTO createUserDTO);

}
